package com.imooc.reflect;

import java.lang.reflect.Method;
import java.util.ArrayList;

/**
 * Created by joe on 16-8-1.
 * 测试泛型
 * 泛型只是在编译的时候起作用
 */
public class MethodDemo4 {
	public static void main(String[] args) {

		ArrayList list = new ArrayList();

		ArrayList<String> list1 = new ArrayList<String>();
		list1.add("hello");

		//list.add(23)是错误的
		Class c1 = list.getClass();
		Class c2 = list1.getClass();
		System.out.println(c1 == c2);
		//反射的操作都是编译之后的操作
		/*
		*
		* c1 == c2结果返回true说明编译之后集合的泛型是去泛化的
		* java中集合泛型,是防止错误输入的,只是在编译阶段有效,
		* 绕过编译就无效了
		* 验证:我们可以通过方法的反射来操作,绕过编译
		* */
		try {
			Method m = c2.getMethod("add",Object.class);
			m.invoke(list1,20);//绕过编译操作就绕过了泛型
			System.out.println(list1.size());
			System.out.println(list1);
			for(Object o:list1){
				System.out.println(o);
			}
		} catch (Exception e) {

		}
	}
}
